﻿#define _CRT_SECURE_NO_WARNINGS 1

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param input int整型vector
     * @param k int整型
     * @return int整型vector
     */
    vector<int> GetLeastNumbers_Solution(vector<int>& input, int k)
    {
        if (input.size() == 0 || k == 0)
        {
            return vector<int>();
        }

        priority_queue<int, vector<int>, less<int>> MinHeap;
        for (int i = 0; i < input.size(); ++i)
        {
            if (i < k)
            {
                MinHeap.push(input[i]);
            }
            else
            {
                if (MinHeap.top() > input[i])
                {
                    MinHeap.pop();
                    MinHeap.push(input[i]);
                }
            }
        }

        vector<int> vec;
        for (int i = 0; i < k; ++i)
        {
            vec.push_back(MinHeap.top());
            MinHeap.pop();
        }
        sort(vec.begin(), vec.end());

        return vec;
    }
};

/*
描述
给定一个长度为 n 的可能有重复值的数组，找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字，则最小的4个数字是1,2,3,4(任意顺序皆可)。
数据范围：0≤k,n≤10000，数组中每个数的大小0≤val≤1000
要求：空间复杂度O(n) ，时间复杂度O(nlogk)

示例1
输入：
[4,5,1,6,2,7,3,8],4
复制
返回值：
[1,2,3,4]
复制
说明：
返回最小的4个数即可，返回[1,3,2,4]也可以
*/

